home *** CD-ROM | disk | FTP | other *** search
- PROFILE
-
- If the "profile and trace" option of the compiler is used, each
- call to err() results in a walkback trace of function calls.
- (Err() is in the IOLIB library. For details, see IOLIB.DOC.) In
- addition, an execution profile is displayed on the console at
- program termination (call to exit()). The profile consists of a
- list of the functions and the number of times (up to 999999)
- each was called. This is sometimes useful for debugging (to
- spot functions that are never called), but is most valuable for
- program execution time optimization. If you're trying to speed
- up a program, pay close attention to the functions that are
- called a lot of times!
-
- The "profile and trace" option of the compiler causes it to add
- a call to the profile printout function just before exiting to
- the operating system. The code at the beginning of the program
- then looks like this:
-
- ; ORG 100H ;implied - ZLINK default
- LD HL,(6)
- LD SP,HL ;initialize stack
- CALL CCGO ;initialize other things
- CALL QMAIN ;execute the user's program
- LD HL,CC2 ;pointer to 1st function
- CALL CCCALLS ;print the profile
- CALL QEXIT ;exit to operating system
-
- A header and two calls are also added to the code generated
- for each function. The function header contains a pointer, a
- counter, and a string with the function name.
-
- ;trials()
- CC2: DW CC3 ;function pointer. Points to the
- ;function pointer in the textually
- ;following function, or contains a
- ;zero if this is the last one.
- DB 0,0,0 ;a three byte BCD counter for the
- ;number of times this function has been
-
-
- ;called. (permits 999999 calls before
- ;overflow.)
- CC4: DB 'trials',0 ;the function name
- QTRIALS:
- LD HL,CC4 ;save pointer to function
- PUSH HL ; header block.
- CALL CCREGIS ;register function entry.
- ;ccregis() pushes onto the stack a
- ;pointer to the function that called
- ;this one, and saves in CURRENT a
- ;pointer to this one.
- ;{ z=a(x);
- LD HL,QX
-
- ... ;regular code.
-
- ;}
- CALL CCLEAVI ;register function return
- ;(resets CURRENT to point to
- ;the function that called this
- ;one)
- POP BC ;discard the pointer added by
- ;ccregis().
- POP BC ;discard the pointer to the
- ;header block of this function.
-
-
- RET
-
- Note that this method permits a walkback trace even in the
- presence of recursive function calls.
-